package funcionesDeSeleccion;

import java.util.ArrayList;
import java.util.Collection;

import util.Aleatorio;

import elementosEvolutivos.Cromosoma;
import elementosEvolutivos.FuncSeleccion;

public class TorneoDeterminista implements FuncSeleccion {
	
	private int numContrincantes;
	
	public TorneoDeterminista(int nc){
		numContrincantes = nc;
	}
	@Override
	public Collection<Cromosoma> seleccionar(Collection<Cromosoma> poblacion, int tam_sel) {
		Collection<Cromosoma> nuevaPoblacion = new ArrayList<Cromosoma>();
		double mejor_apt;
		Cromosoma cr_ganador=null;
		int pos_contr;
		int num_elem = poblacion.size();
		for(int i=0; i<tam_sel; i++){
			mejor_apt=-1.0;
			for(int j=0; j<numContrincantes; j++){
				pos_contr = (int) (Aleatorio.getDoubleAleatorio()*num_elem);
				Cromosoma cr = ((ArrayList<Cromosoma>)poblacion).get(pos_contr);
				double apt = cr.getAptitud();
				if(mejor_apt<=apt){
					mejor_apt=apt;
					cr_ganador=cr;
				}
			}
			nuevaPoblacion.add(cr_ganador.clone());
		}
		return nuevaPoblacion;
	}

}
